package cn.wch.meshlib.util;

import java.nio.ByteBuffer;
//以下方法未作严格校验

/**
 * 计算实用工具
 */
public class CalculateUtil {
    /**
     * 小字节序数组转整型
     * @param source 用于转换的源数据
     * @return
     */
    public static int littleEndianByteArray2Int(byte[] source){
        int t=0;
        for (int i = 0; i < source.length; i++) {
            if(i<=3){
                t|=((source[i] & 0x000000ff)<<(8*i));
            }
        }
        return t;
    }

    /**
     * 小字节序数组转整型
     * @param source 用于转换的源数据
     * @param start 开始位置
     * @param length 长度
     * @return
     */
    public static int littleEndianByteArray2Int(byte[] source,int start,int length){
        int t=0;
        for (int i = 0; i < length; i++) {
            t|=((source[start+i] & 0x000000ff)<<(8*i));
        }
        return t;
    }

    /**
     * 大字节序数组转整型
     * @param source 源数据
     * @return
     */
    public static int bigEndianByteArray2Int(byte[] source){
        int t=0;
        for (int i = 0; i < source.length; i++) {
            if(i<=3){
                t|=((source[source.length-i-1] & 0x000000ff)<<(8*i));
            }
        }
        return t;
    }

    /**
     * 整型转小字节序数组
     * @param source 源数据
     * @param expectLength 预期长度
     * @return
     */
    public static byte[] int2ByteArrayLittleEndian(int source,int expectLength){

        byte[] newArray=new byte[expectLength];
        for (int i = 0; i < expectLength; i++) {
            newArray[expectLength-i-1]=(byte) ((source>>(8*i)) & 0x000000ff);
        }
        return newArray;
    }

    /**
     * 整型转大字节序数组
     * @param source 源数据
     * @param expectLength 预期长度
     * @return
     */
    public static byte[] int2ByteArrayBigEndian(int source,int expectLength){

        byte[] newArray=new byte[expectLength];
        for (int i = 0; i < expectLength; i++) {
            if(i<=3){
                newArray[i]=(byte) ((source>>(8*i)) & 0x000000ff);
            }
        }
        return newArray;
    }
}
